function total_time = simulateFlowShop_FA(order,masterTable)


[rows, columns] = size(masterTable) ;         

startStop = zeros(columns,2,rows); 
% startStop - macierz w ktorej beda przechowywane rozpoczecia i zakonczenia zadan na danej marzynie
% przyklad startStop(3,2,4) to wartosc, ktore mowi nam o ZAKONCZENIU(bo 2
% argument ==2) zadania o numerze 4 na maszynie 3

%order = randperm(4); % losujemy sobie kolejnosc w jakiej zostana obluzone
%zadania na poszczegolnych maszynach, innymi slowy - marszruta
%order = [4 3 1 2];
%order = randperm(rows); %losujemy kolejnosc dla tylu zadan ile przyjdzie z masterTable

%upewniamy siê, ¿e liczba zadañ z masterTable jest równa liczbie zadañ w
%tabeli kolenoci zadañ

orderSize = size(order);
if (rows ~= orderSize(2))
                 error = MException('simulationFlowShop:Wrong_tasks_amount', 'Wrong tasks amount');
                 throw(error);
end

[total_time, delay] = calculateFlow(masterTable, startStop, order);

function [total_time, delay] = calculateFlow(masterTable, startStop, order)
    [rows, columns] = size(masterTable);
    [machines, ~, tasks] = size(startStop);
    delay = 0;
    for i = 1:tasks
        if (i == 1)
            for j = 1:machines
               if j == 1
                   startStop(j,1,order(i)) = 0;
                   startStop(j,2,order(i)) = masterTable(order(i),j);
               else
                   startStop(j,1,order(i)) = startStop(j-1,2,order(i));
                   startStop(j,2,order(i)) = startStop(j,1,order(i))  + masterTable(order(i),j);
               end 
            end
        else
            for j = 1:machines
               if j == 1
                   startStop(j,1,order(i)) = startStop(j,2, order(i-1));
                   startStop(j,2,order(i)) = startStop(j,1,order(i))  + masterTable(order(i),j);
               else
                   startStop(j,1,order(i)) = max([startStop(j,2, order(i-1)) startStop(j-1, 2, order(i))]);
                   diff = startStop(j,1,order(i)) - startStop(j,2,order(i-1));
                   if diff > 0
                       delay = delay + diff;
                   end
                   startStop(j,2,order(i)) = startStop(j,1,order(i))  + masterTable(order(i),j);
                   
               end            
            end
        end
    end
        startStop;
        total_time = startStop(columns,2,order(i));